package com.moyuwanjia.config;

import org.springframework.context.annotation.*;

/**
 * @author 摸鱼丸加~
 * @create 2022-04-27 15:59
 * 该类是一个配置类，它的作用和bean.xml是一样的
 * Spring中的新注解
 *      1.Configuration：
 *          作用：指定当前类为一个配置类
 *      2.ComponentScan:（使用该注解就等同于在XML中配置的效果一致：<context:component-scan base-package="com.moyuwanjia"/>）
 *          作用：用于通过注解指定spring在创建容器时要扫描的包
 *          属性：
 *              value和basePackages两个属性作用一致，都是用于指定创建容器时扫描的包路径
 *      3.Bean:
 *          作用：用于将当前方法的返回值作为bean对象存入spring的ioc容器中
 *          属性：
 *              name/value：用于指定bean的id。当没有指定值的时候，默认值为当前方法的名称
 *
 *
 *       细节：
 *           1.当我们使用注解方式配置时，如果配置的方法存在参数（比如下面的createQueryRunner方法）
 *                那么spirng框架就会去容器中查找有没有可用的bean对象。查找的方式和Autowired的方式一致
 *           2.如果每一个Dao类都是用同一个(单例)，就会造成有的dao没有用完，而有的还在使用runner，可能
 *             会导致线程互相干扰，所以使用创建多例对象的方式，保证每次都是重新创建的实例
 *           3.当配置类作为AnnotationConfigurationContext对象创建的参数时(new AnnotationConfigApplicationContext(自定义配置类.class))
 *             可以不用写Configuration注解。
 *       4.Import:
 *           作用：在当前配置类中导入其他配置类，实现分配置（加载主配置类，其他配置类以导入主配置类的方式）
 *           属性：
 *              value[]:传递需要导入的配置类的字节码文件
 *           概述：如果一个类使用@Import注解修饰之后，那么该类就是一个主配置类（父配置类）
 *                而导入其中的类都是子配置类
 *       5.PropertySource:
 *          作用：用于指定properties文件的位置
 *          属性：
 *              value：指定文件的名称和路径。
 *              关键字：classpath：表示类路径下（标记为资源目录的文件夹下）
 *
 */
@Configuration //该类如果作为AnnotationConfigurationContext对象创建的参数时可以不用写该注解
@PropertySource("classpath:jdbcConfig.properties")
@Import(JdbcConfig.class)
@ComponentScan(basePackages = {"com.moyuwanjia"})
public class SpringConfiguration {

}
